package com.gnomes.builder.client;

import com.gnomes.builder.client.common.controller.ComponentController;
import com.gnomes.builder.client.common.controller.DataController;
import com.gnomes.builder.client.next.common.ComponentHelper;
import com.gnomes.builder.client.next.lock.controller.LockScreen;
import com.gnomes.builder.client.next.main.controller.MainController;
import com.gnomes.builder.client.util.DialogUtil;
import com.gnomes.builder.common.common.GnomesConstants;
import com.gnomes.builder.common.common.GnomesMessagesConstants;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import lombok.extern.log4j.Log4j2;

@Log4j2
public class Main extends Application {
    /*
     * (非 Javadoc)
     *
     * @see javafx.application.Application#start(javafx.stage.Stage)
     */
    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            //システム定義ファイルの置く場所     系统定义文件的位置 　
            DataController.loadIpAddressData();

            //Stage 启动执行顺序 生命周期

            //fxml 模板配置
            FXMLLoader fxmlLoader = ComponentController.createFXMLLoader(GnomesConstants.WINDOWCODE_MAIN);
            //加载主面板
            AnchorPane mainPane = (AnchorPane) fxmlLoader.load();
            //初始化主控制器
            MainController mainController = (MainController) fxmlLoader.getController();

            //主页面配置类
            Scene mainScene = new Scene(mainPane);
            //启动执行顺序 设置主页面最小宽度
            primaryStage.setMinWidth(800);
            //启动执行顺序 设置主页面最小高度
            primaryStage.setMinHeight(600);
            //启动执行顺序 主页面
            primaryStage.setScene(mainScene);
            //启动执行顺序 添加图标
            primaryStage.getIcons().add(ComponentHelper.loadAppIcon());
            //启动执行顺序 加载css 样式
            primaryStage.getScene().getStylesheets().addAll(ComponentHelper.loadStyleSheet());
            //启动顺序设置完毕 在主控制器中设置启动顺序
            mainController.setStage(primaryStage);

            //关闭事件 event：事件
            primaryStage.setOnCloseRequest(event -> {

                if (ComponentController.checkIfValidationRunning()) {
                    // 整合性チェック実行中は終了できない      一致性检查期间无法退出

                    event.consume();
                    //event.consume(); 事件继续执行 执行关闭程序
                    return;
                }
                if (!ComponentController.unsavedConfirmationAll()) {
                    // 未保存の変更あり、処理を中止しば場合     未保存更改，必须停止处理
                    event.consume();
                    return;
                }

                // ストップのラクタを設定  设置停止的栅格
                LockScreen.exit = false;
                // 全てのスレッドを停止する  停止所有线程
                System.exit(0);
            });

            // ログイン画面表示  登录屏幕显示
            mainController.showlogInForm(primaryStage);
        } catch (Exception e) {
            //捕获异常控制台报错 用户界面提醒错误
            log.error(e);
            Alert alert = DialogUtil.getAlert(AlertType.ERROR, GnomesMessagesConstants.ME00_0010);
            alert.showAndWait();
        }
    }

    public static void main(String[] args) {
    //启动程序
        launch(args);
    }
}
